/**
 * API 请求服务配置
 * 使用 axios 创建统一的 API 请求实例
 * 配置请求拦截器和响应拦截器
 */

import axios from 'axios';

// 创建 axios 实例，配置基础设置
const api = axios.create({
  // 设置 API 基础 URL，优先使用环境变量中的配置
  baseURL: process.env.REACT_APP_API_URL || 'http://localhost:3000/api',
  // 设置请求超时时间
  timeout: 10000,
  // 设置默认请求头
  headers: {
    'Content-Type': 'application/json',
  },
});

// 请求拦截器：在发送请求前对请求配置进行处理
api.interceptors.request.use(
  (config) => {
    // 从 localStorage 获取 token
    const token = localStorage.getItem('token');
    // 如果存在 token，添加到请求头中
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器：对响应数据进行统一处理
api.interceptors.response.use(
  (response) => {
    // 直接返回响应数据
    return response.data;
  },
  (error) => {
    // 统一处理错误响应
    if (error.response) {
      switch (error.response.status) {
        case 401:
          // 未授权：token 无效或过期
          // TODO: 可以在这里处理 token 失效的情况，比如跳转到登录页
          break;
        case 403:
          // 禁止访问：权限不足
          // TODO: 可以在这里处理权限不足的情况
          break;
        case 404:
          // 资源未找到
          // TODO: 可以在这里处理资源不存在的情况
          break;
        default:
          // 其他错误
          // TODO: 可以在这里处理其他错误情况
          break;
      }
    }
    return Promise.reject(error);
  }
);

export default api; 